package com.cc8w.admins.controller;

import com.alibaba.fastjson.JSON;
import com.cc8w.admins.service.ProductClassService;
import com.cc8w.entity.ProductAttributeEntity;
import com.cc8w.util.PageData;
import com.cc8w.util.Tools;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

import com.alibaba.fastjson.JSON;

import java.util.*;

/**
 * 产品（商品）大类，如：书，音乐，手机，衣服
 */
@Controller
@RequestMapping("/admin/product")
public class ProductClassController  extends AdminBaseController  {


    @Autowired
    private ProductClassService productClassService;


    @RequestMapping(value="/typelist",method={RequestMethod.POST,RequestMethod.GET})
    public String getTypeList(){
        //1.获取分类的列表
        ArrayList<PageData> productTypeList= (ArrayList<PageData>) productClassService.queryTypeList();
        //System.out.println(productTypeList);
        this.model.addAttribute("productTypeList", productTypeList);
        return "/admin/product/typelist";
    }
    @RequestMapping("/addtypefrm")
    public String addTypeFrm(){
        return "/admin/product/addtypefrm";
    }


    @RequestMapping("/addtype")
    public String addType(@RequestParam Map<String, String> params){
        //1.添加分类 （数据库attr_group可以快速设置属性列表吧）
        System.out.println(params);
        PageData pageData = this.getPageData();
//        String model_name = params.get("model_name");
//        int enable = Integer.parseInt(params.get("enable"));
//        String attr_group = params.get("attr_group");
        int res = productClassService.addProductType(pageData);

        HashMap<String, String> obj = new HashMap<String, String>();
        obj.put("msg", "添加失败！");
        if(res>0)  obj.put("msg", "添加成功！");
        obj.put("back_url", this.basePath+"admin/product/typelist");
        return this.jump( "common/jump", obj);

    }
    @RequestMapping(value="/edittype",method={RequestMethod.GET})
    public String editType( @RequestParam(value="type_id",defaultValue = "") int type_id){
        //1.编辑分类
        PageData productType= (PageData) productClassService.queryProductType(type_id);
        //System.out.println(productType);
        this.model.addAttribute("productType", productType);
        return "/admin/product/edittype";

    }
    @RequestMapping("/updatetype")
    public String updateType(@RequestParam Map<String, String> params){
        System.out.println(params);
        int type_id = Integer.parseInt(params.get("type_id"));
        String model_name = params.get("model_name");
        int enable = Integer.parseInt(params.get("enable"));
        String attr_group = params.get("attr_group");
        int res = productClassService.updateProductType(type_id,model_name,enable,attr_group);


        //return "redirect:/admin/product/edittype?type_id="+type_id; //跳转到编辑页

        HashMap<String, String> obj = new HashMap<String, String>();
        obj.put("msg", "更新失败！");
        if(res>0)  obj.put("msg", "更新成功！");
        return this.jump( "common/jump", obj);
    }
    @RequestMapping("/deltype")
    public String delType(){
        //1.删除分类


        return null;
    }
    @RequestMapping("/getproductattributelist")
    public String getProductAttributeList(@RequestParam(value="currentPage",defaultValue = "1") int currentPage,
                                          @RequestParam(value="showCount",defaultValue = "5") int showCount){//属性分类列表（分页）
        PageData pageData = this.getPageData();

        PageHelper.startPage(currentPage, showCount);
        List<ProductAttributeEntity> productAttributeList = productClassService.getProductAttributeList(pageData);
//        System.out.println(productAttributeList);
//        for (PageData pd :productAttributeList ){
//            System.out.println(pd);
//        }

        PageInfo<ProductAttributeEntity> pageInfo = new PageInfo<>(productAttributeList);
        System.out.println(pageInfo);
//        for (PageData pd :pageInfo.getList()){
//            System.out.println(pd);
//        }

        this.model.addAttribute("page", pageInfo);
        this.model.addAttribute("urlParams", pageData.getUrlParams());//浏览器url参数
        return "/admin/product/productattributelist";
    }
    @RequestMapping("/addproductattribute")
    public String addProductAttribute(){//添加属性分类表单
        //1.获取模型分类
        ArrayList<PageData> productTypeList= (ArrayList<PageData>) productClassService.queryTypeList();
        //System.out.println(productTypeList);
        this.model.addAttribute("productTypeList", productTypeList);
        this.model.addAttribute("mod_id", this.getPageData().getString("mod_id"));

        return "/admin/product/addproductattribute";
    }
    @RequestMapping("/insertproductattribute")
    public String insertProductAttribute(){//添加属性分类
        PageData pageData = this.getPageData();
        pageData.put("sort_orderx",1);//加一个排序
        System.out.println(pageData);
        /**
         * 分割回车：
         * 在不同的操作系统中，对换号符的定义是不同的，比如：
         * 1. \n unix,linux系统，好像新的mac也是这样的。
         * 2. \r 有的mac系统
         * 3. \r\n window系统。
         * 自己观察，你会发现规律，其实用一个正则表达式就可以满足： \r?\n 或根据系统获得换行符 如下
         */
        String attr_values = pageData.getString("attr_values");
        String lineSeparator = System.getProperty("line.separator", "/n");//根据系统平台得到换行符CRLF
        String attr_arr [] = attr_values.split(lineSeparator);
        attr_values = Tools.arrayToStrWithComma(attr_arr);
        pageData.put("attr_values",attr_values);

        //这里要返回自增的id主键
        int res = productClassService.insertProductAttribute(pageData);
        System.out.println(pageData);
        System.out.println(res);

        //在把每个值入库
        Number attr_id = (Number) pageData.get("id");//返回的自增id
        for (int i=0;i<attr_arr.length;i++){
            productClassService.insertProductAttributeValues(attr_id.intValue(),attr_arr[i]);
        }

        HashMap<String, String> obj = new HashMap<String, String>();
        obj.put("msg", "属性添加失败！");
        if(res>0)  obj.put("msg", "属性添加成功！");
        return this.jump( "common/jump", obj);

    }
    @RequestMapping("/editproductattribute")
    public String editProductAttribute(
            @RequestParam(value="attr_id",defaultValue = "1") int attr_id){//编辑属性分类表单
        //1.先获取指定信息
        ProductAttributeEntity attrInfo = productClassService.getProductAttribute(attr_id);
        this.model.addAttribute("attr_info",attrInfo);
        System.out.println(attrInfo);
        //如果非空把 attr_values 分隔符存成回车
        if(attrInfo!=null){
            String lineSeparator = System.getProperty("line.separator", "/n");//根据系统平台得到换行符CRLF
            attrInfo.setAttr_values(attrInfo.getAttr_values().replace(",",lineSeparator)) ;
        }

        //2.获得模型分类列表
        ArrayList<PageData> productTypeList= (ArrayList<PageData>) productClassService.queryTypeList();
        this.model.addAttribute("productTypeList", productTypeList);

        return "/admin/product/editproductattribute";
    }
    @RequestMapping("/updateproductattribute")
    public String updateProductAttribute(){//更新属性分类
        PageData pageData = this.getPageData();
        pageData.put("sort_orderx",1);//加一个排序
        System.out.println(pageData);
        /**
         * 分割回车：
         * 在不同的操作系统中，对换号符的定义是不同的，比如：
         * 1. \n unix,linux系统，好像新的mac也是这样的。
         * 2. \r 有的mac系统
         * 3. \r\n window系统。
         * 自己观察，你会发现规律，其实用一个正则表达式就可以满足： \r?\n 或根据系统获得换行符 如下
         */
        String attr_values = pageData.getString("attr_values");
        String lineSeparator = System.getProperty("line.separator", "/n");//根据系统平台得到换行符CRLF
        String attr_arr [] = attr_values.split(lineSeparator);
        attr_values = Tools.arrayToStrWithComma(attr_arr);
        pageData.put("attr_values",attr_values);

        //这里要返回自增的id主键
        int res = productClassService.updateProductAttribute(pageData);

        //在把每个值入库
        Number attr_id = (Number) pageData.get("id");//返回的自增id
        for (int i=0;i<attr_arr.length;i++){
            //先插有无数据
            if(productClassService.hasProductAttributeValues(attr_id.intValue(),attr_arr[i])==null) {
                productClassService.insertProductAttributeValues(attr_id.intValue(),attr_arr[i]);
            }
        }

        HashMap<String, String> obj = new HashMap<String, String>();
        obj.put("msg", "属性修改失败！");
        if(res>0)  obj.put("msg", "属性修改成功！");
        return this.jump( "common/jump", obj);


    }
    @RequestMapping("/delproductattribute")
    public String delProductAttribute(){//删除属性分类

        return null;
    }






}
